//import Vapor
//import Foundation
//import Czlib
//
//	// 定义压缩相关的错误类型
//enum GzipError: Error {
//	case initializationFailed
//	case compressionFailed
//	case invalidInput
//}
//
//	// Data 的扩展，添加 gzip 压缩功能
//extension Data {
//	func gzipped() throws -> Data {
//		guard !isEmpty else { return Data() }
//		
//		var stream = z_stream()
//		var status: Int32
//		
//		let bufferSize = Swift.max(Swift.min(count, 64 * 1024), 64)
//		
//		status = deflateInit2_(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, MAX_WBITS + 16, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY, ZLIB_VERSION, Int32(MemoryLayout<z_stream>.size))
//		
//		guard status == Z_OK else {
//			throw GzipError.initializationFailed
//		}
//		
//		defer { deflateEnd(&stream) }
//		
//		return try withUnsafeBytes { (input: UnsafeRawBufferPointer) -> Data in
//			guard let baseAddress = input.baseAddress else {
//				throw GzipError.compressionFailed
//			}
//			
//			stream.next_in = UnsafeMutablePointer<UInt8>(mutating: baseAddress.assumingMemoryBound(to: UInt8.self))
//			stream.avail_in = UInt32(count)
//			
//			var output = Data()
//			
//			repeat {
//					// 创建固定大小的缓冲区数组
//				let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufferSize)
//				defer { buffer.deallocate() }
//				
//					// 直接使用指针
//				stream.next_out = buffer
//				stream.avail_out = UInt32(bufferSize)
//				
//				status = deflate(&stream, Z_FINISH)
//				
//				let bytesWritten = bufferSize - Int(stream.avail_out)
//				
//				guard status != Z_STREAM_ERROR else {
//					throw GzipError.compressionFailed
//				}
//				
//					// 将写入的数据添加到输出
//				output.append(buffer, count: bytesWritten)
//				
//			} while stream.avail_out == 0
//			
//			guard status == Z_STREAM_END else {
//				throw GzipError.compressionFailed
//			}
//			
//			return output
//		}
//	}
//}
//
//
//	// 压缩中间件实现
//struct CompressionMiddleware: Middleware {
//	func respond(to request: Request, chainingTo next: any Responder) -> EventLoopFuture<Response> {
//			// 检查请求是否接受压缩
//		let acceptEncoding = request.headers[.acceptEncoding].joined(separator: ", ").lowercased()
//		let supportsCompression = acceptEncoding.contains("gzip")
//		
//			// 如果不支持压缩，直接返回原始响应
//		guard supportsCompression else {
//			return next.respond(to: request)
//		}
//		
//			// 处理支持压缩的请求
//		return next.respond(to: request).flatMap { response in
//				// 检查响应是否已经被压缩
//			if response.headers[.contentEncoding].contains(where: { $0.lowercased() == "gzip" }) {
//				return request.eventLoop.makeSucceededFuture(response)
//			}
//			
//			return response.body.collect(on: request.eventLoop).flatMapThrowing { bodyBuffer in
//				guard let bodyBuffer = bodyBuffer else {
//						// 如果响应体为空，直接返回
//					return response
//				}
//				
//				do {
//						// 将 ByteBuffer 转换为 Data
//					let data = Data(buffer: bodyBuffer)
//					
//						// 压缩数据
//					let compressedData = try data.gzipped()
//					
//						// 创建新的 ByteBuffer 并写入压缩后的数据
//					var buffer = ByteBuffer()
//					buffer.writeBytes(compressedData)
//					
//						// 更新响应
//					response.body = .init(buffer: buffer)
//					response.headers.replaceOrAdd(name: .contentEncoding, value: "gzip")
//					response.headers.replaceOrAdd(name: .contentLength, value: buffer.readableBytes.description)
//					
//				} catch {
//						// 如果压缩失败，记录日志并返回原始响应
//					request.logger.error("压缩响应失败: \(error)")
//				}
//				
//				return response
//			}
//		}
//	}
//}
